from uuid import uuid4
from app import db


class Data(db.Model):
    __tablename__ = "data"
    __table_args__ = {"schema": "AeroSentinel"}
    uuid = db.Column(db.String(36), primary_key=True, default=lambda: str(uuid4()))
    device_id = db.Column(
        db.String(36), db.ForeignKey("AeroSentinel.devices.name"), nullable=False
    )
    timestamp = db.Column(db.BigInteger, nullable=False)

    # 温度相关数据
    avg_temperature = db.Column(db.Float)
    var_temperature = db.Column(db.Float)
    max_temperature = db.Column(db.Float)
    min_temperature = db.Column(db.Float)

    # 湿度相关数据
    avg_humidity = db.Column(db.Float)
    var_humidity = db.Column(db.Float)
    max_humidity = db.Column(db.Float)
    min_humidity = db.Column(db.Float)

    # 新风相关数据
    avg_fresh_air = db.Column(db.Float)
    var_fresh_air = db.Column(db.Float)
    max_fresh_air = db.Column(db.Float)
    min_fresh_air = db.Column(db.Float)

    # 臭氧相关数据
    avg_ozone = db.Column(db.Float)
    var_ozone = db.Column(db.Float)
    max_ozone = db.Column(db.Float)
    min_ozone = db.Column(db.Float)

    # 二氧化氮相关数据
    avg_nitro_dio = db.Column(db.Float)
    var_nitro_dio = db.Column(db.Float)
    max_nitro_dio = db.Column(db.Float)
    min_nitro_dio = db.Column(db.Float)

    # 甲醛相关数据
    avg_methanal = db.Column(db.Float)
    var_methanal = db.Column(db.Float)
    max_methanal = db.Column(db.Float)
    min_methanal = db.Column(db.Float)

    # PM2.5相关数据
    avg_pm2_5 = db.Column(db.Float)
    var_pm2_5 = db.Column(db.Float)
    max_pm2_5 = db.Column(db.Float)
    min_pm2_5 = db.Column(db.Float)

    # 一氧化碳相关数据
    avg_carb_momo = db.Column(db.Float)
    var_carb_momo = db.Column(db.Float)
    max_carb_momo = db.Column(db.Float)
    min_carb_momo = db.Column(db.Float)

    # 细菌相关数据
    avg_bacteria = db.Column(db.Float)
    var_bacteria = db.Column(db.Float)
    max_bacteria = db.Column(db.Float)
    min_bacteria = db.Column(db.Float)

    # 氡相关数据
    avg_radon = db.Column(db.Float)
    var_radon = db.Column(db.Float)
    max_radon = db.Column(db.Float)
    min_radon = db.Column(db.Float)


class AnalysisReport(db.Model):
    __tablename__ = "AnalysisReport"
    __table_args__ = {"schema": "AeroSentinel"}
    id = db.Column(db.Integer, primary_key=True)
    device_id = db.Column(
        db.String(255), db.ForeignKey("AeroSentinel.devices.name"), nullable=False
    )
    report_type = db.Column(db.String(50))  # simple, anomaly, trend, comprehensive
    time_range = db.Column(db.Integer)  # 分析的天数
    content = db.Column(db.Text)
    created_at = db.Column(db.DateTime)

    def __repr__(self):
        return f"<AnalysisReport {self.id} for Device {self.device_id}>"
